package fourEightDays;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Day13 {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextInt()) { // 注意 while 处理多个 case
            int n = in.nextInt();
            int m = in.nextInt();
            // 这个条件多余，当m和n相同时，step只有一个元素，无需判断已初始化为0
            // if (m == n) {
            //     System.out.println(0);
            //     return;
            // }

            // （1）确定状态表示：dp[i] 表示到第 i 个台阶至少需要几步，-1 为到不了
            // （2）推导状态转移方程：如果当前位置不为 -1 说明之前已经能到了，取 min(step[i]+1,step[i+j]);
            // 否则说明之前不能到，取step[i] + 1.
            // （3）创建 dp 表
            int len = m - n + 1;
            int[] step = new int[len];
            // （4）初始化 dp 表：除了开始为0，其余全部为-1
            for (int i = 0; i < len; i ++) {
                step[i] = -1;
            }
            step[0] = 0;
            // （5）确定填表顺序，填表：从左向右
            for (int i = n; i <= m; i ++) {
                // 下标变换
                int sIndex1 = i - n;
                if (step[sIndex1] == -1) {
                    // 如果当前不能到达，直接跳过
                    continue;
                }
                // 获取当前位置能走的步数
                List<Integer> list = getDivs(i);
                // 根据步数填step表
                for (int j : list) {
                    // 下标变换
                    int sIndex2 = j + sIndex1;
                    if (sIndex2 + n <= m && step[sIndex2] == -1) {
                        // 说明此时该位置还没有到达过
                        step[sIndex2] = step[sIndex1] + 1;
                    } else if (sIndex2 + n <= m) {
                        // 说明此时该位置已被到达过
                        step[sIndex2] = Math.min(step[sIndex2], step[sIndex1] + 1);
                    }
                }
            }
            // （6）返回值：根据step[len-1]输出返回值即可
            if (step[len - 1] != -1) {
                System.out.println(step[len - 1]);
            } else {
                System.out.println(-1);
            }

        }
    }
    // 求约数
    private static List<Integer> getDivs(int num) {
        // List<Integer> res = new ArrayList<>();
        // for (int i = 2; i < n; i ++) {
        //     if (n % i == 0) {
        //         res.add(i);
        //     }
        // }
        // return res;
        List<Integer> list = new ArrayList<>();
        for (int i = 2; i * i <= num; i++) {
            if (num % i == 0) {
                list.add(i);
                if (num / i != i) {
                    list.add(num / i);
                }
            }
        }
        return list;
    }
}
